package com.bjpowernode.other.cas;

/**
 * 自旋锁计数器
 */
public class Counter {

    private volatile int value;

    /*
        比较
     */
    public boolean compareAndSwap(int oldValue, int newValue) {
        //实际是由操作系统控制, 这里只是模拟
        synchronized (this){
            if (value == oldValue) {
                value = newValue;//修改主内存中的值
                return true;
            }
            return false;
        }
    }

    /*
        循环 自增
     */
    public int incrementAndGet() {
        int oldValue;
        int newValue;

        do{
            oldValue = value;//获取主内存中的值
            newValue = oldValue + 1;
        }while (!compareAndSwap(oldValue, newValue));

        return value;
    }
}
